package kotlin


// 数据类的定义：
// 用 data 修饰，并且属性写在主构造函数中，属性用 var / val 修饰。
// 不能是 abstract open, sealed, inner 的类。
data class Person9(
        var name: String,
        var age: Int
)

// 自动实现 equals / hasCode 方法。
fun run91() {
    var a = Person9("neo", 20)
    var b = Person9("neo", 20)
    println("a == b : ${a == b}")
}

// 自动实现 hasCode 方法。
fun run92() {
    var a = Person9("neo", 20)
    var b = Person9("neo", 20)
    var set: MutableSet<Person9> = HashSet<Person9>()
    set.add(a)
    println("set.contains(b): ${set.contains(b)}")
}

// 自动实现 toString() 方法。
fun run93() {
    var a = Person9("neo", 30)
    println("a: $a")
}

// 自动实现 copy() 方法。
fun run94() {
    var a = Person9("neo", 20)
    var b = a.copy()
    println("b = $b")
    var c = a.copy(age = 30)
    println("c = $c")
}

// 对数据员进行成员解构
fun run95() {
    var a = Person9("neo", 20)
    var (name, age) = a
    println("name = $name, age = $age")
}